package com.fhzn.auth.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fhzn.auth.entity.DataResource;
import com.fhzn.auth.entity.User;
import com.fhzn.auth.web.request.*;
import com.fhzn.auth.web.vo.DataResourceVO;
import com.fhzn.auth.web.vo.UserVO;

import java.util.List;

/**
 * @author 老顾
 * @apiNote
 * @since 2023/12/22
 */
public interface UserService extends IService<User> {

    /**
     * 配置用户角色
     *
     * @param userNames 用户名列表
     * @param code      角色code
     * @param handler   操作人
     * @param type      1:新增 2:修改
     * @param appCode   应用code
     */
    void configureUsersRole(List<String> userNames, String code, String handler, int type, String appCode);

    /**
     * 分页查询用户
     *
     * @param request 查询请求
     * @return 分页结果
     */
    Page<User> userWithPage(UserQueryRequest request);

    /**
     * 添加用户
     *
     * @param request 添加请求
     * @return 添加结果
     */
    UserVO add(UserOpRequest request);

    /**
     * 更新用户
     *
     * @param request 更新请求
     * @return 更新结果
     */
    String updateUser(UserOpRequest request);

    /**
     * 添加角色
     *
     * @param request 添加请求
     * @return 添加结果
     */
    String addRole(UserRoleRequest request);

    /**
     * 用户密码查询
     *
     * @param request 查询请求
     * @return 查询结果
     */
    String passwordSearch(UserPasswordRequest request);

    /**
     * 重置密码
     *
     * @param request 重置请求
     * @return 重置结果
     */
    String resetPassword(UserPasswordRequest request);

    /**
     * 用户密码修改
     *
     * @param request 修改请求
     * @return 修改结果
     */
    String passwordModify(UserPasswordRequest request);

    /**
     * 用户密码校验
     *
     * @param request 校验请求
     * @return 校验结果
     */
    String passwordCheck(UsernamePasswordRequest request);

    /**
     * 根据用户昵称查询单个用户
     *
     * @param nickname 用户昵称
     * @return 用户信息
     */
    User findUserByNickName(String nickname);

    /**
     * 获取用户的数据权限
     *
     * @param request 数据权限请求
     * @return 数据权限列表信息
     */
    List<DataResource> getUserDataResByParentCode(DataResourceRequest request);
}
